home *** CD-ROM | disk | FTP | other *** search
- unit QTTest2U;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls;
-
- type
- TForm1 = class(TForm)
- BtnFuncPointerParam: TButton;
- BtnPascalFuncParams: TButton;
- BtnCFuncParams: TButton;
- BtnGenericApproach: TButton;
- BtnProcNoParams: TButton;
- BtnPascalProcParams: TButton;
- BtnCProcParams: TButton;
- BtnProcPointerParam: TButton;
- BtnConstVarParams: TButton;
- BtnOpenArrayParam: TButton;
- procedure BtnProcNoParamsClick(Sender: TObject);
- procedure BtnPascalProcParamsClick(Sender: TObject);
- procedure BtnCProcParamsClick(Sender: TObject);
- procedure BtnProcPointerParamClick(Sender: TObject);
- procedure BtnConstVarParamsClick(Sender: TObject);
- procedure BtnOpenArrayParamClick(Sender: TObject);
- procedure BtnPascalFuncParamsClick(Sender: TObject);
- procedure BtnCFuncParamsClick(Sender: TObject);
- procedure BtnFuncPointerParamClick(Sender: TObject);
- procedure BtnGenericApproachClick(Sender: TObject);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- uses
- QTThunkU;
-
- var
- DLLHandle: THandle16;
-
- procedure TForm1.BtnProcNoParamsClick(Sender: TObject);
- begin
- Call16BitRoutine('NoParameters', DllHandle, ccPascal, [0], [0]);
- end;
-
- procedure TForm1.BtnPascalProcParamsClick(Sender: TObject);
- begin
- Call16BitRoutine('Proc2ParamsPascal', DllHandle, ccPascal,
- [5, 20], [SizeOf(Longint), SizeOf(Longint)]);
- end;
-
- procedure TForm1.BtnCProcParamsClick(Sender: TObject);
- begin
- Call16BitRoutine('Proc2ParamsC', DllHandle, ccCdecl,
- [5, 20], [SizeOf(Longint), SizeOf(Longint)]);
- end;
-
- procedure TForm1.BtnProcPointerParamClick(Sender: TObject);
- const
- Msg: PChar = '32-bit call';
- begin
- Call16BitRoutine('ProcPointerParam', DllHandle, ccPascal,
- [Msg], [Succ(StrLen(Msg))]);
- end;
-
- procedure TForm1.BtnConstVarParamsClick(Sender: TObject);
- var
- Number: Smallint;
- const
- Str: ShortString = 'Hello from 32-bit';
- begin
- Number := 0;
- Call16BitRoutine('ProcVarConstParams', DllHandle, ccPascal,
- [@Number, @Str], [SizeOf(Smallint), Succ(Length(Str))]);
- ShowMessage(Format('New value of var parameter is %d', [Number]));
- end;
-
- procedure TForm1.BtnOpenArrayParamClick(Sender: TObject);
- type
- TNumbers = array[11..15] of Smallint;
- const
- Numbers: TNumbers = (1, 2, 3, 4, 5);
- begin
- Call16BitRoutine('ProcOpenArrayParam', DllHandle, ccPascal,
- [@Numbers, High(TNumbers) - Low(TNumbers)],
- [SizeOf(TNumbers), SizeOf(Word)]);
- end;
-
- procedure TForm1.BtnPascalFuncParamsClick(Sender: TObject);
- begin
- ShowMessage(Format('Sum of parameters = %d',
- [Call16BitRoutine('Func2ParamsPascal', DllHandle,
- ccPascal, [5, 20], [SizeOf(Longint), SizeOf(Longint)])]));
- end;
-
- procedure TForm1.BtnCFuncParamsClick(Sender: TObject);
- begin
- ShowMessage(Format('Sum of parameters = %d',
- [Call16BitRoutine('Func2ParamsC', DllHandle,
- ccCdecl, [5, 20], [SizeOf(Longint), SizeOf(Longint)])]));
- end;
-
- procedure TForm1.BtnFuncPointerParamClick(Sender: TObject);
- var
- ReturnedMsg: PChar;
- const
- Msg: PChar = '32-bit call';
- begin
- ReturnedMsg := PChar(Call16BitRoutine('FuncPointerParam',
- DllHandle, ccPascal, [Msg], [Succ(StrLen(Msg))]));
- ShowMessage(Format('Msg received from 16-bit: %s',
- [StrPas(Ptr16To32Fix(ReturnedMsg))]));
- Ptr16To32Unfix(ReturnedMsg);
- end;
-
- procedure TForm1.BtnGenericApproachClick(Sender: TObject);
- const
- // These are from Delphi 1's WinTypes unit
- gfsr_SystemResources = $0000;
- gfsr_GDIResources = $0001;
- gfsr_UserResources = $0002;
- var
- Sys, User, GDI: Word;
- begin
- Sys := LoWord(Call16BitRoutine('GetFreeSystemResources',
- User16Handle, ccPascal, [gfsr_SystemResources], [SizeOf(Word)]));
- User := LoWord(Call16BitRoutine('GetFreeSystemResources',
- User16Handle, ccPascal, [gfsr_UserResources], [SizeOf(Word)]));
- GDI := LoWord(Call16BitRoutine('GetFreeSystemResources',
- User16Handle, ccPascal, [gfsr_GDIResources], [SizeOf(Word)]));
- MessageDlg(Format(
- 'System = %d%%'#13'User = %d%%'#13'GDI = %d%%',
- [Sys, User, GDI]),
- mtInformation, [mbOk], 0);
- end;
-
- initialization
- DLLHandle := LoadLib16('DLL16Bit.DLL');
- finalization
- FreeLibrary16(DllHandle);
- end.
-